package com.zndroid.gridview.load;

import android.content.Context;
import android.graphics.Bitmap;
import android.widget.ImageView;

import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RawRes;

import java.io.File;

public interface IImageDisplayEngine {
    /**
     * 如果没有设置全局回调的话，是否开启内部加载完成回调（默认关闭，如果开启请记得处理回调）
     *
     * @return true or false
     * */
    default boolean isOpenInnerProgress() {return false;}
    /**
     * 全局图片加载完成回调
     * @return ILoadCallBack
     * */
    ILoadCallBack getLoadCallBack();
    /**
     * 需要子类实现该方法，以确定如何加载和显示图片
     *
     * {@link #onDisplayImage(Context, ImageView, int, ILoadCallBack)} 择其一实现
     *
     * @param context   上下文
     * @param imageView 需要展示图片的ImageView
     * @param url       图片地址
     * @param loadCallBack 加载回调
     */
    void onDisplayImage(Context context, ImageView imageView, String url, @Nullable ILoadCallBack loadCallBack);

    /**
     * 需要子类实现该方法，以确定如何加载和显示图片
     *
     * {@link #onDisplayImage(Context, ImageView, String, ILoadCallBack)} 择其一实现
     *
     * @param context   上下文
     * @param imageView 需要展示图片的ImageView
     * @param resId     本地图片资源id
     * @param loadCallBack 加载回调
     */
    void onDisplayImage(Context context, ImageView imageView, @RawRes @DrawableRes int resId, @Nullable ILoadCallBack loadCallBack);

    /**
     * 需要子类实现该方法，以确定如何加载和显示图片
     *
     * {@link #onDisplayImage(Context, ImageView, int, ILoadCallBack)} 择其一实现
     *
     * @param context   上下文
     * @param imageView 需要展示图片的ImageView
     * @param file     本地图片资源id
     * @param loadCallBack 加载回调
     */
    void onDisplayImage(Context context, ImageView imageView, @NonNull File file, @Nullable ILoadCallBack loadCallBack);

    /**
     * 图片缓存
     * @param url 图片的地址
     * @return 当前框架的本地缓存图片
     */
    Bitmap getCacheImage(String url);
}
